package services

import (
	"encoding/json"
	"fmt"

	"github.com/sirupsen/logrus"
)

//213	weekSwitch	//	星期开关     1字节8个位，1~7位分别代表星期一到星期日
//214	cycleStartTime1	//	循环开启时间1   小时（1字节）
//215		//	循环开启时间1   分钟（1字节）
//216	cycleEndTime1	//	循环关闭时间1   小时（1字节）
//217		//	循环关闭时间1   分钟（1字节）
//218	duration1	//	开启时长1    小时（1字节）
//219		//	开启时长1    分钟（1字节）
//220		//	开启时长1    秒（1字节）
//221	interval1	//	间隔时长1    小时（1字节）
//222		//	间隔时长1    分钟（1字节）
//223		//	间隔时长1    秒（1字节）
//224	pumpMode1	//	风扇模式1    0 正常  1动感模式  2 跟随外界
//225	pumpSpeed1	//	风扇速度1   0~100%
//226	scheduledStartTime1	//	定时开启时间1   小时（1字节）
//227		//	定时开启时间1   分钟（1字节）
//228	scheduledDuration1	//	定时开启时长1    分钟（1字节）
//229		//	定时开启时长1    秒（1字节）
//230	scheduledStartTime2	//	定时开启时间2   小时（1字节）
//231		//	定时开启时间2  分钟（1字节）
//232	scheduledDuration2	//	定时开启时长2    分钟（1字节）
//233		//	定时开启时长2    秒（1字节）
//234	weekSwitch2	//	星期开关     1字节8个位，1~7位分别代表星期一到星期日
//235	pumpSpare1	//	 水泵备用1
//236	pumpSpare2	//	 水泵备用2
//237	pumpSpare3	//	 水泵备用3
//238	pumpSpare4	//	 水泵备用4
//239	pumpSpare5	//	 水泵备用5
//240	pumpSpare6	//	 水泵备用6
//241	pumpSpare7	//	 水泵备用7

// ParsePumpControlData 解析水泵控制器的数据
func (d *DeviceData) ParsePumpCtrlTData() error {
	if len(d.RegisterData) < 29 { // 确保数据长度足够
		return fmt.Errorf("寄存器数据长度不足: %v", d.RegisterData)
	}

	params := PumpCtrlTParams{
		WeekSwitch:          d.RegisterData[0],
		CycleStartTime1:     fmt.Sprintf("%d:%d", d.RegisterData[1], d.RegisterData[2]),
		CycleEndTime1:       fmt.Sprintf("%d:%d", d.RegisterData[3], d.RegisterData[4]),
		Duration1:           fmt.Sprintf("%d:%d:%d", d.RegisterData[5], d.RegisterData[6], d.RegisterData[7]),
		Interval1:           fmt.Sprintf("%d:%d:%d", d.RegisterData[8], d.RegisterData[9], d.RegisterData[10]),
		PumpMode1:           d.RegisterData[11],
		PumpSpeed1:          d.RegisterData[12],
		ScheduledStartTime1: fmt.Sprintf("%d:%d", d.RegisterData[13], d.RegisterData[14]),
		ScheduledDuration1:  fmt.Sprintf("%d:%d", d.RegisterData[15], d.RegisterData[16]),
		ScheduledStartTime2: fmt.Sprintf("%d:%d", d.RegisterData[17], d.RegisterData[18]),
		ScheduledDuration2:  fmt.Sprintf("%d:%d", d.RegisterData[19], d.RegisterData[20]),
		WeekSwitch2:         d.RegisterData[21],
		PumpSpare1:          d.RegisterData[22],
		PumpSpare2:          d.RegisterData[23],
		PumpSpare3:          d.RegisterData[24],
		PumpSpare4:          d.RegisterData[25],
		PumpSpare5:          d.RegisterData[26],
		PumpSpare6:          d.RegisterData[27],
		PumpSpare7:          d.RegisterData[28],
	}

	// 将参数结构体转化为JSON格式
	payload, err := json.Marshal(params)
	if err != nil {
		return fmt.Errorf("序列化数据失败: %v", err)
	}

	// 输出日志
	logrus.Infof("水泵控制数据: %s", payload)

	// 发送数据到平台
	err = PublishEvent(d.Mac, payload)
	if err != nil {
		return fmt.Errorf("发送事件失败: %v", err)
	}

	return nil
}
